package com.ahora.org.controller.MBean;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;

import com.ahora.org.ejb.dao.util.Util;
import com.ahora.org.ejb.dao.util.Validaciones;
import com.ahora.org.ejb.facade.interfaces.UtilitarioFacade;
import com.ahora.org.ejb.jpa.entities.Utilitarios;

@SessionScoped
@ManagedBean(name = "manUtilBM")
public class MantenimientoUtilitarios {

	private Utilitarios objUtil;
	private List<Utilitarios> listaUtil;
	@EJB
	private UtilitarioFacade serUtil;
	private String accion;
	// Cantidad y paginacion de la lista
	private int cantUtil;
	private int numUtil;

	public int getNumUtil() {
		return numUtil;
	}

	public void setNumUtil(int numUtil) {
		this.numUtil = numUtil;
	}

	public int getCantUtil() {
		return cantUtil;
	}

	public void setCantUtil(int cantUtil) {
		this.cantUtil = cantUtil;
	}

	public Utilitarios getObjUtil() {
		return objUtil;
	}

	public void setObjUtil(Utilitarios objUtil) {
		this.objUtil = objUtil;
	}

	public List<Utilitarios> getListaUtil() {
		return listaUtil;
	}

	public void setListaUtil(List<Utilitarios> listaUtil) {
		this.listaUtil = listaUtil;
	}

	public String getAccion() {
		return accion;
	}

	public void setAccion(String accion) {
		this.accion = accion;
	}

	public MantenimientoUtilitarios() {
		objUtil = new Utilitarios();
		listaUtil = new ArrayList<Utilitarios>();
		// listarUtilitarios();
	}

	public void listarUtilitarios() {
		try {
			listaUtil = serUtil.listarUtilitarios();
			cantUtil = listaUtil.size();
			numUtil = Validaciones.retornarValor_Paginado(listaUtil.size());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public String limpiarLista() {
		objUtil = new Utilitarios();
		return null;
	}

	public String updateUtilitario() {
		String valor = "";
		try {
			objUtil.setIdEstado(1);
			valor = serUtil.modificarUtil(objUtil);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			limpiarLista();
		}
		return valor;

	}

	public String registrarUtilitarioX() {
		String valor = "";
		try {
			objUtil.setIdEstado(1);
			valor = serUtil.registrarUtil(objUtil);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			limpiarLista();
		}
		return valor;
	}

	public String buscarUtilitario() {
		accion = "update";

		Map<String, String> paramMap = FacesContext.getCurrentInstance()
				.getExternalContext().getRequestParameterMap();
		String strCodigoParametro = paramMap.get("codUtil");
		System.out.println("MI CODIGO ES : " + strCodigoParametro
				+ " CODIGO USUARIO XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX "
				+ strCodigoParametro);

		try {
			objUtil = new Utilitarios();
			objUtil = serUtil.obtenerUtil(Integer.parseInt(strCodigoParametro));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "registUtil";
	}

	public String redireccionarRegisterUtil() {
		accion = "register";
		limpiarLista();
		listarUtilitarios();
		return "registUtil";
	}

	public String manUtilitario() {
		listarUtilitarios();
		return "manUtilitario";
	}

	public String DeleteUtilitario() {
		String valorDelete = "";
		FacesMessage msg = null;
		valorDelete = serUtil.deleteUtil(Integer.parseInt(valorEliminar));
		msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "INFO", valorDelete);
		FacesContext.getCurrentInstance().addMessage(null, msg);
		System.out.println("VALOR DEL DELETE *******" + valorDelete);
		listarUtilitarios();
		return "manUtilitario";
	}

	public String registrarEditarUtilitario() {
		FacesMessage msg = null;
		String d = "", retorno = "";
		try {
			if (accion.equals("update")) {
				d = updateUtilitario();
				if (d.startsWith("Se")) {
					retorno = "manUtilitario";
				} else {
					retorno = "registUtil";
				}

			} else {
				d = registrarUtilitarioX();
				if (d.startsWith("Se")) {
					retorno = "manUtilitario";
				} else {
					retorno = "registUtil";
				}
			}
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "INFO", d);
			FacesContext.getCurrentInstance().addMessage(null, msg);
			listarUtilitarios();
		} catch (Exception e) {
			System.out
					.println("ERROR EN EL MANAGER BEAN DEL MANTENIMIENTO USUARIIOOOOOOOOO ...........");
			e.printStackTrace();
		}
		return retorno;
	}

	public String valorEliminar;

	public String getValorEliminar() {
		return valorEliminar;
	}

	public void setValorEliminar(String valorEliminar) {
		this.valorEliminar = valorEliminar;
	}

	public void actionListener(ActionEvent e) {
		Map<String, String> paramMap = FacesContext.getCurrentInstance()
				.getExternalContext().getRequestParameterMap();
		String strCodigoParametro = paramMap.get("codUtilE");
		valorEliminar = strCodigoParametro;
	}

	public String backToManUti() {
		return "manUtilitario";
	}

	public void selectMenuUtilitario(ActionEvent a) {
		listarUtilitarios();
		setRutaLogotipo(serUtil.rutaArchivo());
		FacesContext fc = FacesContext.getCurrentInstance();
		fc.getApplication().getNavigationHandler()
				.handleNavigation(fc, null, "manUtilitario");

	}

	private void crearImagenLogo(byte[] dd, String nombreArchivo) {
		File file = null;
		File f = null;
		String path = null;
		try {
			
			//creo la carpeta
			f = new File("C:/PAC/IMAGEN/");
			f.mkdirs();
			
			if (nombreArchivo.endsWith(".png")) {
				path = "C:/PAC/IMAGEN/logo.png";
			} else {
				path = "C:/PAC/IMAGEN/logo.jpg";
			}

			file = new File(path);
			

			FileOutputStream fos = new FileOutputStream(file);
			InputStream inStream = new ByteArrayInputStream(dd);
			int size = (int) dd.length;
			byte[] buffer = new byte[size];
			int length = -1;
			while ((length = inStream.read(buffer)) != -1) {
				fos.write(buffer, 0, length);
			}
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// ACA EMPEZAMOS A SUBIR LA imagen
	public void accionSubirLogotipo(FileUploadEvent f) {
		try {
			crearImagenLogo(f.getFile().getContents(), f.getFile()
					.getFileName());
			
			if (f.getFile().getFileName().endsWith(".png")) {
				setRutaLogotipo("C:/PAC/IMAGEN/logo.png");
			} else {
				setRutaLogotipo("C:/PAC/IMAGEN/logo.jpg");
			}
			
			Util.mensajeInfo(serUtil.moificarRutaLogo(rutaLogotipo), "");
			listarUtilitarios();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	private String rutaLogotipo;

	public String getRutaLogotipo() {
		return rutaLogotipo;
	}

	public void setRutaLogotipo(String rutaLogotipo) {
		this.rutaLogotipo = rutaLogotipo;
	}

	public void obtenerLogo(ActionEvent a) {
		System.out.println(serUtil.rutaArchivo().trim());
		setRutaLogotipo(serUtil.rutaArchivo().trim());

	}

	
}
